package com.example.demo.dubbo.impl;

import com.example.demo.dubbo.PaymentDubboService;
import org.springframework.stereotype.Service;

/**
 * 支付服务实现类
 * 使用 @Service 注解，Spring 会自动将类名首字母小写作为 bean 名称
 * bean 名称：paymentDubboServiceImpl
 */
@Service
public class PaymentDubboServiceImpl implements PaymentDubboService {

    @Override
    public String createPayment(String orderId, Double amount) {
        // 验证支付金额
        if (!validateAmount(amount)) {
            throw new IllegalArgumentException("Invalid amount");
        }

        // 模拟创建支付订单
        String paymentId = "PAY_" + System.currentTimeMillis();
        logPaymentEvent("CREATE", paymentId, orderId);
        System.out.println("创建支付订单: orderId=" + orderId + ", amount=" + amount + ", paymentId=" + paymentId);
        return paymentId;
    }

    @Override
    public String queryPaymentStatus(String paymentId) {
        // 模拟查询支付状态
        System.out.println("查询支付状态: paymentId=" + paymentId);
        return "SUCCESS";
    }

    @Override
    public boolean cancelPayment(String paymentId) {
        // 检查余额
        if (!checkBalance(paymentId)) {
            return false;
        }

        // 模拟取消支付
        logPaymentEvent("CANCEL", paymentId, null);
        System.out.println("取消支付: paymentId=" + paymentId);
        return true;
    }

    /**
     * 验证支付金额（私有方法，不应该被标记为入口）
     */
    private boolean validateAmount(Double amount) {
        return amount != null && amount > 0;
    }

    /**
     * 检查余额（私有方法，不应该被标记为入口）
     */
    private boolean checkBalance(String paymentId) {
        // 模拟余额检查
        return true;
    }

    /**
     * 记录支付事件（私有方法，不应该被标记为入口）
     */
    private void logPaymentEvent(String eventType, String paymentId, String orderId) {
        System.out.println("Payment Event: " + eventType + ", paymentId=" + paymentId + ", orderId=" + orderId);
    }
}
